%% Приложение

\chapter{Примеры работы TLS}
\label{app1}
Примечания:
\begin{enumerate}

\item Вся необходимая терминология и описания атрибутов приведены в Главе №1, «TLS -- потоки и TLS -- строфы в контексте XMPP».

\item (alt) --- альтернативные шаги, не обязательные к выполнению, но возможные (случай сбоя или ошибки).
\end{enumerate}

\section{<<Клиент-Сервер>>}
\label{app1:sec1}

Поток данных с обеспечением безопасности потока c STARTTLS.

Шаг 1: Клиент формирует поток к серверу:

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 2: Сервер откликается посылкой тэга потока клиенту:

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       id='c2s_123'
       from='example.com'
       version='1.0'>
\end{verbatim}

Шаг 3: Сервер посылает клиенту расширение STARTTLS и данные о механизме аутентификации и других особенностях потока: 

\begin{verbatim}
<stream:features>
     <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
       <required/>
     </starttls>
     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
       <mechanism>DIGEST-MD5</mechanism>
       <mechanism>PLAIN</mechanism>
     </mechanisms>
   </stream:features>
\end{verbatim}

Шаг 4: Клиент посылает серверу команду STARTTLS:

\begin{verbatim}
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
\end{verbatim}

Шаг 5 (alt) Сервер информирует клиента, что согласование TLS не состоялось и следует прервать поток и разорвать TCP -- соединение:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
   </stream:stream>
\end{verbatim}

Шаг 6: Клиент и сервер пытаются завершить согласование применения TLS через существующее TCP -- соединение.

Шаг 7: Если согласование TLS успешно, клиент формирует новый поток к серверу:

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 7 (alt): Если согласование TLS не получилось, сервер закрывает TCP -- соединение.

Шаг 8: Сервер реагирует посылкой клиенту заголовка потока и любых характеристик потока:

\begin{verbatim}
<stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       from='example.com'
       id='c2s_234'
       version='1.0'>
    <stream:features>
      <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
        <mechanism>DIGEST-MD5 </mechanism>
        <mechanism>PLAIN </mechanism>
        <mechanism>EXTERNAL </mechanism>
      </mechanisms>
    </stream:features>
\end{verbatim}

Шаг 9: Клиент продолжает согласование SASL.

%Текст.

\section{<<Сервер-Сервер>>}
\label{app1:sec2}

Поток данных для двух серверов, обеспечивающих безопасность с помощью STARTTLS.

Шаг 1: Сервер1 инициирует поток Серверу2: 

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 2: Сервер2 откликается посылкой тэга потока Серверу1: 

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       from='example.com'
       id='s2s_123'
       version='1.0'>
\end{verbatim}

Шаг 3: Сервер2 посылает расширение STARTTLS Серверу1 вместе с данными о механизме аутентификации и любыми другими возможностями потока:

\begin{verbatim}
<stream:features>
     <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'>
       <required/>
     </starttls>
     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
       <mechanism>DIGEST-MD5</mechanism>
       <mechanism>KERBEROS_V4</mechanism>
     </mechanisms>
   </stream:features>
\end{verbatim}

Шаг 4: Сервер1 посылает команду STARTTLS Серверу2:

\begin{verbatim}
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
\end{verbatim}

Шаг 5: Сервер2 информирует Server1 о том, что он может продолжать работу:

\begin{verbatim}
<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
\end{verbatim}

Шаг 5 (alt): Сервер2 информирует Server1 о том, что согласование применения TLS не прошло и поток закрывается:

\begin{verbatim}
<failure xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
   </stream:stream>
\end{verbatim}

Шаг 6: Сервер1 и Сервер2 пытаются завершить согласование применения TLS через TCP.

Шаг 7: Если согласование TLS прошло успешно, Сервер1 формирует новый поток к Серверу2:

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       to='example.com'
       version='1.0'>
\end{verbatim}

Шаг 7 (alt): Если согласование TLS не прошло, Сервер2 закрывает TCP -- соединение.

Шаг 8: Сервер2 откликается посылкой заголовка потока Серверу1 вместе с данными о доступных возможностях потока:

\begin{verbatim}
<stream:stream
       xmlns='jabber:server'
       xmlns:stream='http://etherx.jabber.org/streams'
       from='example.com'
       id='s2s_234'
       version='1.0'>
   <stream:features>
     <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
       <mechanism>DIGEST-MD5</mechanism>
       <mechanism>KERBEROS_V4</mechanism>
       <mechanism>EXTERNAL</mechanism>
     </mechanisms>
   </stream:features>
\end{verbatim}

Шаг 9: Сервер1 продолжает согласование применения SASL.

%Текст.

%%% Local Variables:
%%% mode: latex
%%% coding: utf-8-unix
%%% TeX-master: "../default"
%%% End:
